package com.mh.web.controller.system;

import com.mh.common.core.controller.BaseController;
import com.mh.common.core.domain.BaseResp;
import com.mh.common.core.page.PageResult;
import com.mh.common.utils.SecurityUtils;
import com.mh.common.utils.UserConstants;
import com.mh.system.domain.SysDictType;
import com.mh.system.service.SysDictTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@RestController
@RequestMapping("/system/dict/type")
public class SysDictTypeController extends BaseController {

    @Autowired
    private SysDictTypeService dictTypeService;

    //1. 多条件分页查询
    @GetMapping("/list")
    public PageResult list(SysDictType dictType) {
        startPage(); //分页
        List<SysDictType> dictTypes = dictTypeService.selectDictTypeList(dictType); //调用service
        return getData(dictTypes); //封装查询结果,响应前端分页效果
    }

    //2. 根据id查询字典信息
    @GetMapping("/{dictId}")
    public BaseResp getInfo(@PathVariable Long dictId) {
        return BaseResp.success(dictTypeService.selectDictTypeById(dictId));
    }

    //3. 增
    @PostMapping
    public BaseResp add(@RequestBody SysDictType dictType) {

        //如果type不唯一
        if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dictType))) {
            return BaseResp.error("新增字典类型: ["+dictType.getDictType()+"]已存在");
        }

        dictType.setCreateBy(SecurityUtils.getUsername());
        return toAjax(dictTypeService.insertDictType(dictType)); //响应受影响行数
    }

    //4. 更新
    @PutMapping
    public BaseResp edit(@RequestBody SysDictType dictType) {

        //判断1: type已存在 --> 进入下一个判断
        if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dictType))) {
            //.selectDictTypeById: 获取目前ID对应的数据
            //.getDictType(): 获取目前ID在数据库中的type
            String selectDictType = dictTypeService.selectDictTypeById(dictType.getDictId()).getDictType();
            //目前形参传入的type
            String inputDictType = dictType.getDictType();
            //判断2: 数据库中和传入的type不一样-->数据不可修改
            if ( ! selectDictType.equals(inputDictType) ){
                return BaseResp.error("修改字典类型: ["+dictType.getDictType()+"]已存在");
            }
        }

        //情况1: type不存在 --> 可修改
        //情况2: type存在, 但传入type和数据库type一样, 那表示是修改type外的其他内容 --> 可修改
        dictType.setUpdateBy(SecurityUtils.getUsername());
        return toAjax(dictTypeService.updateDictType(dictType)); //响应受影响行数
    }

    //5. 删
    @DeleteMapping
    public BaseResp delete(@RequestBody Long[] ids) {
        return toAjax(dictTypeService.deleteDictTypeByIds(ids));
    }

    //7. 清空缓存: 前端清空缓存按钮会请求后端的/system/dict/type/clearCache路径
    @DeleteMapping("/clearCache")
    public BaseResp clearCache(){
        dictTypeService.clearCache();
        return BaseResp.success("清空缓存成功");
    }
}
